import config from "./config"
import api from './api'
import tool from './utils/tool'
import http from "./utils/request"
import { permission, rolePermission } from './utils/permission'

import scTable from './components/scTable'
import scTableColumn from './components/scTable/column.js'
import scFilterBar from './components/scFilterBar'
import scUpload from './components/scUpload'
import scUploadMultiple from './components/scUpload/multiple'
import scUploadFile from './components/scUpload/file'
import scUploadAffix from './components/scUpload/affix'
import scFormTable from './components/scFormTable'
import scTableSelect from './components/scTableSelect'
import scPageHeader from './components/scPageHeader'
import scSelect from './components/scSelect'
import scDialog from './components/scDialog'
import scForm from './components/scForm'
import scTitle from './components/scTitle'
import scWaterMark from './components/scWaterMark'
import scQrCode from './components/scQrCode'
import scEcharts from './components/scEcharts'
import scFileImport from "@/components/scFileImport/index.vue";

import scStatusIndicator from './components/scMini/scStatusIndicator'
import scTrend from './components/scMini/scTrend'
import scDict from './components/scDict'
import scPrint from "@/components/scPrint/index.vue";
import scEditorPrint from "@/components/scEditorPrint/index.vue";
import scPrintTemplate from "@/components/scPrintTemplate/index.vue";
import scPrintButton from "@/components/scPrintButton/index.vue";
import scExportButton from "@/components/scExportButton/index.vue";
import scCheckButton from "@/components/scCheckButton/index.vue";
import scUnCheckButton from "@/components/scUnCheckButton/index.vue";

import auth from './directives/auth'
import auths from './directives/auths'
import authsAll from './directives/authsAll'
import role from './directives/role'
import time from './directives/time'
import copy from './directives/copy'
import errorHandler from './utils/errorHandler'
import column from './directives/column'
import columns from './directives/columns'
import columnsAll from './directives/columnsAll'

import * as elIcons from '@element-plus/icons-vue'
import * as scIcons from './assets/icons'

import VueHighlightJs from '@highlightjs/vue-plugin'

import 'highlight.js/styles/github.css'
import hljs from 'highlight.js/lib/common'
console.log(hljs)
import hljsVuePlugin from '@highlightjs/vue-plugin'
import moment from 'moment';


export default {
	install(app) {
		//挂载全局对象
		app.config.globalProperties.$CONFIG = config;
		app.config.globalProperties.$TOOL = tool;
		app.config.globalProperties.$HTTP = http;
		app.config.globalProperties.$API = api;
		app.config.globalProperties.$AUTH = permission;
		app.config.globalProperties.$ROLE = rolePermission;
		app.config.globalProperties.moment = moment
		//注册全局组件
		app.component('hljsVuePlugin', hljsVuePlugin);
		app.component('VueHighlightJs', VueHighlightJs);
		app.component('scTable', scTable);
		app.component('scTableColumn', scTableColumn);
		app.component('scFilterBar', scFilterBar);
		app.component('scUpload', scUpload);
		app.component('scUploadMultiple', scUploadMultiple);
		app.component('scUploadFile', scUploadFile);
		app.component('scUploadAffix', scUploadAffix);
		app.component('scFormTable', scFormTable);
		app.component('scTableSelect', scTableSelect);
		app.component('scPageHeader', scPageHeader);
		app.component('scSelect', scSelect);
		app.component('scDialog', scDialog);
		app.component('scForm', scForm);
		app.component('scTitle', scTitle);
		app.component('scWaterMark', scWaterMark);
		app.component('scQrCode', scQrCode);
		app.component('scStatusIndicator', scStatusIndicator);
		app.component('scTrend', scTrend);
		app.component('scDict', scDict);
		app.component('moment', moment);
		app.component('scEcharts', scEcharts);
		app.component('scPrint',scPrint)
		app.component('scFileImport',scFileImport)
		app.component('scEditorPrint',scEditorPrint)
		app.component('scPrintTemplate',scPrintTemplate)
		app.component('scPrintButton',scPrintButton)
		app.component('scExportButton',scExportButton)
		app.component('scCheckButton',scCheckButton)
		app.component('scUnCheckButton',scUnCheckButton)

		//注册全局指令
		app.directive('auth', auth)
		app.directive('auths', auths)
		app.directive('auths-all', authsAll)
		app.directive('column', column)
		app.directive('columns', columns)
		app.directive('columns-all', columnsAll)
		app.directive('role', role)
		app.directive('time', time)
		app.directive('copy', copy)

		//统一注册el-icon图标
		for(let icon in elIcons){
			app.component(`ElIcon${icon}`, elIcons[icon])
		}
		//统一注册sc-icon图标
		for(let icon in scIcons){
			app.component(`ScIcon${icon}`, scIcons[icon])
		}

		//关闭async-validator全局控制台警告
		window.ASYNC_VALIDATOR_NO_WARNING = 1

		//全局代码错误捕捉
		app.config.errorHandler = errorHandler
	}
}
